//高精度算法真是太好玩辣
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
	int ws[101] = { 0 };
	int collect[101] = { 0 };
	ws[0] = 1;
	collect[0] = 1;
	int i, j, n;
	scanf("%d", &n);
	for (i = 2; i <= n; i++) {
		for (j = 0; j < 100;j++)ws[j] *= i;
		for (j = 0; j < 100; j++) 
			if (ws[j] > 9) {
				ws[j + 1] += ws[j] / 10;
				ws[j] %= 10;
			}
		for (j = 0; j < 100; j++) {
			collect[j] += ws[j];
			if (collect[j] > 9) {
				collect[j + 1] += collect[j] / 10;
				collect[j] %= 10;
			}
		}
	}
	for (j = 100; j >= 0;j--)
		if(collect[j]>0)
			do {
				printf("%d", collect[j]);
				j--;
			} while (j >= 0);
	return 0;
}

//int main()
//{
//	unsigned long long int s = 0, m = 1, n;
//	scanf("%lld", &n);
//	for (int i = 1; i <= n; i++) {
//		m = 1;
//		for (int j = 1; j <= i; j++) {
//			m *= j;
//		}
//		s += m;
//	}
//	printf("%lld", s);
//	return 0;
//}